<?php
/************************************************
 *  描述: 基础类，所有元素的基类
 *  作者: firmit 
 *  创建: 2010-04-20
 *  更新: 2013-01-15
 *        添加了构造函数，用来设置部分变量
 ************************************************/

class MC_Base{

    /**  
     * 执行中发生错误是否记录日志  
     */  
    private $isLog = false;   
    /**  
     * 记录Log文件路径  
     */  
    private $logFile = '';   
    /**  
     * 是否查询出错的时候终止脚本执行  
     */  
    private $isExit = false;   
    /**  
     * 执行是否出错了  
     */  
    private $isError = false;   
    /**  
     * 错误消息  
     */  
    private $errMsg  = '';
	

    /**
     * @var object 对象单例
     */
    static $_instance = NULL;

    //------------------------   
    //   
    //  类本身操作方法   
    //   
    //------------------------   
	
    /**  
     * 构造函数  
     */  
	function __construct(){
		if(defined('MC_ROOT_DIR') || __get_config('Common.HostEnv')!='prod' ){
			$this->$logFile = MC_ROOT_DIR.'/log/error.log';
		}else{
			$isLog = false;
			$this->$logFile = '';
		}
	}
	
  
    /**  
     * 设置类属性  
     *  
     * @param str $key  需要设置的属性名  
     * @param str $value 需要设置的属性值  
     * @return void  
     */  
    protected function set($key, $value){   
        $this->$key = $value;   
    }   
  
    /**  
     * 读取类属性  
     *  
     * @param str $key  需要读取的属性名  
     * @return void  
     */  
    protected function get($key){   
        return $this->$key;   
    }
    
    /**  
     * 返回类的所有属性 
     *  
     * @param str $key  需要读取的属性名  
     * @return mixed   
     */  

    function getInfo($key=NULL){
        if($key!=NULL){
            return $this->get($key);
        }else{
            $arr = get_object_vars($this);
            return $arr;
        }
    }

    /**  
     * 设置类的属性 
     *  
     * @param str $idx  需要设置的属性名  
     * @param mixed $_info 需要设置的属性值  
     * @return void  
     */  

    function setInfo($_info=NULL, $idx=NULL){
        if($idx!=NULL and isset($_info)){
            $this->set($idx,$_info);
        }else if(is_array($_info) and !empty($_info) and $idx==NULL){
            foreach ($_info as $key=>$value)
                //滤掉不在stuconf中的数据
                if(array_key_exists($key, $this->getInfo()))
                    $this->set($key,$value);
        }
    }
    
    /**  
     * 打印类的所有属性 
     *  
     * @return void  
     */  
     
    function printInfo(){
        echo "<table>\n";
        foreach($this->getInfo() as $key=>$value){
            echo "<tr><td>$key</td><td>$value</td></tr>\n";
        }
        echo "</table>\n";
    }

    /**  
     * 错误日志  
     */  
    protected function errorLog($msg=''){
        if (!$this->isLog){   
            return;   
        }   
        $log = " [". date("Y-m-d H:i:s") ."] ";   
        $log .= "Error: $msg ";   
        if ($this->logFile != ''){   
            error_log($log ."\n", 3, $this->logFile);   
        } else {   
            error_log($log);   
        }   
        $this->set('isError', true);
        $this->set('errMsg', $msg);
        //fenghao add this
        //ErrorMsg::fnErrMsg($log, "", "错误信息");
        return true;   
    }   
    //是否出现错误
    function hasError(){
        return $this->get('isError');
    }
    //错误信息
    function getErrMsg(){
        return $this->get('errMsg');
    }

    //以下是常用的静态函数
    
    //工厂函数
    //创建实例
    //@param array $_info, user对应的相应参数 
    static function CreateObject($_type = NULL, $_info = NULL){
        $_obj = NULL;
        if($_type != NULL){
            if($_info == NULL)
                $_obj = new $_type();
            else
                $_obj = new $_type($_info);
            if(is_object($_obj) and $_obj != NULL)
                return $_obj;
            else
                return false;
        }else{
            return false;
        }

    }
}

